<?php
namespace asset;

class CteateDir
{
    private $ds = '/';
    private $close = '

}';
    /**
     * 初始化控制器
     */
    private $controller_html = '<?php
namespace app\_module_\controller;
use think\Controller;
class _controller_ extends _extends_
{
	protected $param;
	public function _initialize()
	{
		parent::_initialize();
		$this->param = input("param.");
	}

	public function index(){}
}';

    /**
     * 初始化方法
     */
    private $action_html = '
	public function _action_(){}';


    /**
     * 初始化配置
     */
    private $config_html = '<?php
return [
	"view_replace_str"       => [
		"__PUBLIC__"=>"/public",
		"__ROOT__" => "/",
		"__UPLOAD__" => "/uploads",
	],
	"template"  =>  [
		"layout_on"     =>  false,
		"layout_name"   =>  "layout",
	],
	"dispatch_success_tmpl"  => "common/jump",
	"dispatch_error_tmpl"    => "common/jump",
];';

    /**
     * 初始化函数
     */
    private $common_html = '<?php
';

    /**
     * 初始化模版文件
     */
    private $file_html = '{extend name="layout" /}
{block name="container"}
__content__
{/block}
{block name="script"}
<script>

</script>
{/block}';

    /**
     * 初始化模版布局
     */
    private $layout_html = '<!DOCTYPE html>
<html lang="en">
<head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta content="A fully featured admin theme which can be used to build CRM, CMS, etc." name="description" />
    <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0;" name="viewport" />
    <meta content="Coderthemes" name="author" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
</head>

<body class="">
    <div class="wrapper">
        <div class="container-fluid">
            {block name="container"}{/block}
        </div>
    </div>
    {block name="script"}{/block}
</body>
</html>';

    /**
     * 初始化html文件
     */
    private $html_html = '<!DOCTYPE html>
<html lang="en">
<head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta content="A fully featured admin theme which can be used to build CRM, CMS, etc." name="description" />
    <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0;" name="viewport" />
    <meta content="Coderthemes" name="author" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
</head>

<body class="">
    
</body>

</html>';
    /**
     * 初始化php文件
     */
    private $php_html = '<?php
    
';

    /**
     * 初始化js文件
     */
    private $js_html = '$(function () {
        
});';

    private $temp;

    /**
     * 参数
     */
    private $params = [
        'app' => 'application/',
        'position' => 'controller',
        'view' => 'view',
        'model' => 'model',
        'common' => 'common',
        'config' => 'config',
    ];

    /**
     * 构造方法
     * @param array $params 数组参数
     */
    public function __construct($params=[])
    {
        $this->params = array_merge($this->params, $params);
    }

    /**
     * 创建控制器目录文件
     * @param array $path 路径数组
     * @param string $suffix 文件后缀
     * @param string $extends 继承扩展
     */
    public function create_controller($path=[], $suffix='php', $extends = 'Controller')
    {
        if ($extends == '') {
            $extends = 'Controller';
        }
        $suffix = '.'.$suffix;

        if (!$path['module']) {
            return '模块未填写';
        }
        if (!$path['controller']) {
            return '模块未填写';
        }
        $path['controller'] = ucfirst($path['controller']);
        //模块目录
        $module_dir = $this->params['app'].$path['module'];
        //检测是否有模块目录 没有则创建
        if (!is_dir($module_dir)) {
            mkdir($module_dir);
        }
        //控制器目录
        $controller_dir = $this->params['app'].$path['module'].$this->ds.$this->params['position'];
        //检测是否有控制器目录 没有则创建
        if (!is_dir($controller_dir)) {
            mkdir($controller_dir);
        }
        //模型目录
        $model_dir = $this->params['app'].$path['module'].$this->ds.$this->params['model'];
        //检测是否有模型目录 没有则创建
        if (!is_dir($model_dir)) {
            mkdir($model_dir);
        }

        //配置文件
        $config_file = $this->params['app'].$path['module'].$this->ds.$this->params['config'].'.php';
        //检测是否存在配置文件 没有则创建
        $config_html = $this->config_html;
        if (!is_file($config_file)) {
            @file_put_contents($config_file, $config_html);
        }

        //函数文件
        $common_file = $this->params['app'].$path['module'].$this->ds.$this->params['common'].'.php';
        //检测是否存在函数文件 没有则创建
        $common_html = $this->common_html;
        if (!is_file($common_file)) {
            @file_put_contents($common_file, $common_html);
        }
        //是否自定义扩展文件
        if ($extends && $extends != 'Controller') {
            $extends = ucfirst($extends);
            $extends_file = $this->params['app'].$path['module'].$this->ds.$this->params['position'].$this->ds.$extends.$suffix;
            //检测是否存在控制器文件 没有则创建
            $extends_html = $this->controller_html;
            //替换模版模块
            $extends_html = str_replace('_module_', $path['module'], $extends_html);
            //替换模版控制器
            $extends_html = str_replace('_controller_', $extends, $extends_html);
            //替换模版扩展文件
            $extends_html = str_replace('_extends_', 'Controller', $extends_html);
            //替换掉统一接受数据成员变量
            $extends_html = str_replace('protected $param;', '', $extends_html);
            //替换掉统一接受数据
            $extends_html = str_replace('$this->param = input("param.");', '', $extends_html);
            //替换掉初始方法
            $extends_html = str_replace('public function index(){}', '', $extends_html);
            if (!is_file($extends_file)) {
                $result = @file_put_contents($extends_file, $extends_html);
            }
        }
        
        //控制器文件
        $controller_file = $this->params['app'].$path['module'].$this->ds.$this->params['position'].$this->ds.$path['controller'].$suffix;
        //检测是否存在控制器文件 没有则创建
        $html = $this->controller_html;
        //替换模版模块
        $html = str_replace('_module_', $path['module'], $html);
        //替换模版控制器
        $html = str_replace('_controller_', $path['controller'], $html);
        //替换模版扩展文件
        $html = str_replace('_extends_', $extends, $html);
        if (!is_file($controller_file)) {
            $result = @file_put_contents($controller_file, $html);
            if ($result) {
                return '文件创建完成';
            } else {
                return '文件创建失败';
            }
        } else {
            return '文件已存在';
        }
    }
    

    /**
     * 创建模版目录文件
     * @param array $path 路径数组
     * @param string $suffix 文件后缀
     * @param string $extends 继承扩展
     */
    public function create_view($path=[], $suffix='html')
    {
        $suffix = '.'.$suffix;
        if (!$path['module']) {
            return '模块目录未填写';
        }
        if (!$path['view']) {
            return '文件目录未填写';
        }
        if (!$path['file']) {
            return '文件名未填写';
        }
        //模块目录
        $module_dir = $this->params['app'].$path['module'];
        //检测是否有模块目录 没有则创建
        if (!is_dir($module_dir)) {
            mkdir($module_dir);
        }

        //配置文件
        $config_file = $this->params['app'].$path['module'].$this->ds.$this->params['config'].'.php';
        //检测是否存在配置文件 没有则创建
        $config_html = $this->config_html;
        if (!is_file($config_file)) {
            @file_put_contents($config_file, $config_html);
        }
        
        //函数文件
        $common_file = $this->params['app'].$path['module'].$this->ds.$this->params['common'].'.php';
        //检测是否存在函数文件 没有则创建
        $common_html = $this->common_html;
        if (!is_file($common_file)) {
            @file_put_contents($common_file, $common_html);
        }

        //视图文件夹
        $view_dir = $this->params['app'].$path['module'].$this->ds.$this->params['view'];
        //检测是否存在视图文件夹 没有则创建
        if (!is_dir($view_dir)) {
            mkdir($view_dir);
        }

        //二级文件夹
        $view2_dir = $this->params['app'].$path['module'].$this->ds.$this->params['view'].$this->ds.$path['view'];
        //检测是否存在二级文件夹 没有则创建
        if (!is_dir($view2_dir)) {
            mkdir($view2_dir);
        }
        //布局
        $layout_file = $this->params['app'].$path['module'].$this->ds.$this->params['view'].$this->ds.'layout.html';
        $layout_html = $this->layout_html;
        if (!is_file($layout_file)) {
            @file_put_contents($layout_file, $layout_html);
        }

        //文件
        $file = $this->params['app'].$path['module'].$this->ds.$this->params['view'].$this->ds.$path['view'].$this->ds.$path['file'].$suffix;
        $file_html = $this->file_html;
        if (!is_file($file)) {
            $result = @file_put_contents($file, $file_html);
            if ($result) {
                return '文件创建完成';
            } else {
                return '文件创建失败';
            }
        } else {
            return '文件已存在';
        }
    }
    
    
    /**
     * 创建控制器操作文件
     * @param array $path 路径数组
     * @param string $suffix 文件后缀
     * @param string $template 是否创建模版
     */
    public function create_action($path=[], $suffix='php', $template='true')
    {
        $suffix = '.'.$suffix;
        if (!$path['module']) {
            return '模块未填写';
        }
        if (!$path['controller']) {
            return '模块未填写';
        }
        if (!$path['action']) {
            return '操作未填写';
        }
        $controller_file = $this->params['app'].$path['module'].$this->ds.$this->params['position'].$this->ds.$path['controller'].$suffix;
        
        $file = fopen($controller_file, "r") or die("Unable to open file!");
        $file_xml = fread($file, filesize($controller_file));
        if ($template == 'true') {
            //文件
            $action_file = $this->params['app'].$path['module'].$this->ds.$this->params['view'].$this->ds.$path['controller'].$this->ds.$path['action'].'.html';
            $file_html = $this->file_html;
            if (!is_file($action_file)) {
                @file_put_contents($action_file, $file_html);
            }
        }
        if (!strpos($file_xml, lcfirst($path['action']))) {
            $this->xmlkh($file_xml);
            $file_xml =  $this->temp;
            $action_html = $this->action_html;
            $action_html = str_replace('_action_', lcfirst($path['action']), $action_html);
            $file_xml = $file_xml.$action_html.$this->close;
            $result = @file_put_contents($controller_file, $file_xml);
            fclose($file);
            if ($result) {
                if ($template == 'true') {
                    $v_file = $this->params['app'].$path['module'].$this->ds.$this->params['view'].$this->ds.$path['controller'].$this->ds.$path['action'].'.html';
                    $file_html = $this->file_html;
                    if (!is_file($v_file)) {
                        @file_put_contents($v_file, $file_html);
                    }
                }
                return '方法添加完成';
            } else {
                return '方法添加失败';
            }
        } else {
            return '操作已经存在';
        }
    }

    /**
     * 创建模文件夹
     * @param array $route 路径
     * @param string $folder 文件夹名称
     */
    public function create_folder($route='', $folder='')
    {
        if (!$folder) {
            return '文件夹名称必须填写';
        }
        if($route){
            if(!is_dir($route)){
                return '无效路径';
            }else{
                if(is_dir($route.'/'.$folder)){
                    return '文件夹已存在';
                }else{
                    mkdir($route.'/'.$folder);
                    return '文件夹创建成功';
                }
            }
        }else{
            if(is_dir($folder)){
                return '文件夹已存在';
            }else{
                mkdir($folder);
                return '文件夹创建成功';
            }
        }
    }

    /**
     * 创建模文件夹
     * @param array $route 路径
     * @param string $folder 文件名
     */
    public function create_files($route='', $files='')
    {
        if (!$files) {
            return '文件名称必须填写';
        }
        if($route){
            if(!is_dir($route)){
                return '无效路径';
            }else{
                if(is_file($route.'/'.$files)){
                    return '文件已存在';
                }else{
                    $html = '';
                    if(str2arr($files,'.')[1] == 'html'){
                        $html = $this->html_html;
                    }
                    if(str2arr($files,'.')[1] == 'php'){
                        $html = $this->php_html;
                    }
                    if(str2arr($files,'.')[1] == 'js'){
                        $html = $this->js_html;
                    }
                    @file_put_contents($route.'/'.$files,$html);
                    return '文件创建成功';
                }
            }
        }else{
            if(is_file($files)){
                return '文件已存在';
            }else{
                @file_put_contents($files,'');
                return '文件创建成功';
            }
        }
    }

    public function xmlkh($data, $i = "1")
    {
        $kh = substr($data, '-'.($i));
        if (!strpos($kh, lcfirst('}'))) {
            $this->xmlkh($data, ($i+1));
        } else {
            $str = substr($data, 0, strlen($data)-($i));
            $this->temp = $str;
        }
    }
}
